﻿package com.firewolf.template.caseclass;
/**
 * 抽象的父类，里面有模板方法
 * @author Administrator
 *
 */
public abstract class AbstractFatherClass {
	public final void templateMethod(){ //模板方法，调用了一些别的方法，定义了一连串的步骤
		primitiveOperation1();
		primitiveOperation2();
		concreteOperation1();
		concreteOperation2();
		hook();
	}
	abstract void primitiveOperation1(); //不同的子类可能需要不同的实现，声明为抽象方法
	abstract void primitiveOperation2();
	void concreteOperation1() {
		System.out.println("所有子类都会有的方法1");	
	}
	void concreteOperation2() {
		System.out.println("所有子类都会有的方法2");
	}
	void hook(){};//钩子方法，父类中不做任何实现，子类可以重写他并在这里面实现自己想做的操作，增强灵活性
}
